한국어

마이크로서비스 아키텍처에서 분산 트랜잭션을 관리하기 위한 사가 패턴을 심층적으로 분석하고, 그 이점, 과제, 구현 전략 및 실제 사례를 다룹니다.

사가 패턴: 마이크로서비스를 위한 분산 트랜잭션 구현

마이크로서비스의 세계에서는 여러 서비스에 걸쳐 데이터 일관성을 유지하는 것이 상당한 과제가 될 수 있습니다. 모놀리식 애플리케이션에서 흔히 사용되는 전통적인 ACID(원자성, 일관성, 고립성, 지속성) 트랜잭션은 분산 환경에는 적합하지 않은 경우가 많습니다. 바로 이 지점에서 사가 패턴이 등장하여 분산 트랜잭션을 관리하고 마이크로서비스 전반에 걸쳐 데이터 무결성을 보장하는 강력한 솔루션을 제공합니다.

사가 패턴이란 무엇인가?

사가 패턴은 여러 마이크로서비스에 걸쳐 일련의 로컬 트랜잭션을 관리하는 데 사용되는 디자인 패턴입니다. 이는 최종적 일관성(eventual consistency)을 달성하는 방법을 제공하는데, 이는 데이터가 일시적으로는 일관되지 않을 수 있지만 결국에는 일관된 상태로 수렴된다는 것을 의미합니다. 여러 서비스에 걸친 단일 원자적 트랜잭션에 의존하는 대신, 사가 패턴은 트랜잭션을 각기 단일 서비스에 의해 수행되는 더 작고 독립적인 일련의 트랜잭션으로 분해합니다.

사가 내의 각 로컬 트랜잭션은 단일 마이크로서비스의 데이터베이스를 업데이트합니다. 만약 트랜잭션 중 하나가 실패하면, 사가는 선행 트랜잭션에 의해 이루어진 변경 사항을 되돌리기 위해 일련의 보상 트랜잭션(compensating transactions)을 실행하여 전체 작업을 효과적으로 롤백합니다.

왜 사가 패턴을 사용하는가?

몇 가지 요인들이 사가 패턴을 마이크로서비스 아키텍처에서 트랜잭션을 관리하는 데 유용한 도구로 만듭니다:

ACID 대 BASE

ACID와 BASE(Basically Available, Soft state, Eventually consistent)의 차이점을 이해하는 것은 사가 패턴 사용 여부를 결정할 때 매우 중요합니다.

두 가지 주요 사가 구현 전략

사가 패턴을 구현하는 두 가지 주요 방법이 있습니다: 코레오그래피(Choreography)와 오케스트레이션(Orchestration)입니다.

1. 코레오그래피 기반 사가

코레오그래피 기반 사가에서는 각 마이크로서비스가 다른 마이크로서비스에서 발행하는 이벤트를 수신하고 그에 따라 반응함으로써 사가에 참여합니다. 중앙 오케스트레이터가 없으며, 각 서비스는 자신의 책임과 언제 행동을 수행해야 하는지 알고 있습니다.

작동 방식:

  1. 사가는 마이크로서비스가 트랜잭션의 시작을 나타내는 이벤트를 발행할 때 시작됩니다.
  2. 다른 마이크로서비스는 이 이벤트를 구독하고, 이벤트를 수신하면 자신의 로컬 트랜잭션을 수행합니다.
  3. 트랜잭션을 완료한 후, 각 마이크로서비스는 작업의 성공 또는 실패를 나타내는 또 다른 이벤트를 발행합니다.
  4. 다른 마이크로서비스는 이러한 이벤트를 수신하고, 사가의 다음 단계로 진행하거나 오류 발생 시 보상 트랜잭션을 시작하는 등 적절한 조치를 취합니다.

예시: 전자상거래 주문 (코레오그래피)

  1. 주문 서비스: 새로운 주문 요청을 받고 `OrderCreated` 이벤트를 발행합니다.
  2. 재고 서비스: `OrderCreated`를 구독합니다. 이벤트를 수신하면 재고를 확인합니다. 재고가 충분하면 상품을 예약하고 `InventoryReserved`를 발행합니다. 부족하면 `InventoryReservationFailed`를 발행합니다.
  3. 결제 서비스: `InventoryReserved`를 구독합니다. 이벤트를 수신하면 결제를 처리합니다. 성공하면 `PaymentProcessed`를 발행하고, 실패하면 `PaymentFailed`를 발행합니다.
  4. 배송 서비스: `PaymentProcessed`를 구독합니다. 이벤트를 수신하면 배송을 준비하고 `ShipmentPrepared`를 발행합니다.
  5. 주문 서비스: `ShipmentPrepared`를 구독합니다. 이벤트를 수신하면 주문을 완료된 것으로 표시합니다.
  6. 보상: `PaymentFailed` 또는 `InventoryReservationFailed`가 발행되면, 다른 서비스들은 이를 수신하고 보상 트랜잭션(예: 예약된 재고 해제)을 수행합니다.

코레오그래피의 장점:

코레오그래피의 단점:

2. 오케스트레이션 기반 사가

오케스트레이션 기반 사가에서는 중앙 오케스트레이터(종종 전용 서비스나 상태 기계로 구현됨)가 사가를 관리하고 참여하는 마이크로서비스의 로컬 트랜잭션 실행을 조정합니다. 오케스트레이터는 각 서비스에 무엇을 언제 해야 하는지 지시합니다.

작동 방식:

  1. 클라이언트가 오케스트레이터에게 트랜잭션 시작을 요청하면 사가가 시작됩니다.
  2. 오케스트레이터는 참여 마이크로서비스에 로컬 트랜잭션을 수행하라는 명령을 보냅니다.
  3. 각 마이크로서비스는 트랜잭션을 수행하고 성공 또는 실패를 오케스트레이터에게 알립니다.
  4. 결과에 따라 오케스트레이터는 다음 단계로 진행할지 또는 보상 트랜잭션을 시작할지 결정합니다.

예시: 전자상거래 주문 (오케스트레이션)

  1. 주문 오케스트레이터: 새로운 주문 요청을 받습니다.
  2. 주문 오케스트레이터: 재고 서비스에 상품을 예약하라는 명령을 보냅니다.
  3. 재고 서비스: 상품을 예약하고 주문 오케스트레이터에게 알립니다.
  4. 주문 오케스트레이터: 결제 서비스에 결제를 처리하라는 명령을 보냅니다.
  5. 결제 서비스: 결제를 처리하고 주문 오케스트레이터에게 알립니다.
  6. 주문 오케스트레이터: 배송 서비스에 배송을 준비하라는 명령을 보냅니다.
  7. 배송 서비스: 배송을 준비하고 주문 오케스트레이터에게 알립니다.
  8. 주문 오케스트레이터: 주문을 완료된 것으로 표시합니다.
  9. 보상: 어떤 단계든 실패하면 주문 오케스트레이터는 관련 서비스에 보상 명령(예: 예약된 재고 해제)을 보냅니다.

오케스트레이션의 장점:

오케스트레이션의 단점:

보상 트랜잭션 구현

사가 패턴의 중요한 측면은 보상 트랜잭션의 구현입니다. 이러한 트랜잭션은 실패 시 이전에 완료된 트랜잭션의 효과를 되돌리기 위해 실행됩니다. 목표는 전체 사가를 완료할 수 없더라도 시스템을 일관된 상태로 되돌리는 것입니다.

보상 트랜잭션의 주요 고려사항:

보상 트랜잭션의 예시:

과제 및 고려사항

사가 패턴은 상당한 이점을 제공하지만, 몇 가지 과제와 고려사항도 제시합니다:

사용 사례 및 예시

사가 패턴은 특히 분산 시스템 및 마이크로서비스 아키텍처에서 다양한 사용 사례에 적합합니다. 일반적인 예시는 다음과 같습니다:

예시: 글로벌 은행 거래

서로 다른 국가에 위치하고 다양한 규정 및 규정 준수 확인을 받아야 하는 두 개의 다른 은행 간의 글로벌 은행 거래 시나리오를 상상해 보십시오. 사가 패턴은 트랜잭션이 정의된 단계를 따르도록 보장할 수 있습니다:

  1. 거래 시작: 고객이 미국에 위치한 A 은행의 계좌에서 독일에 위치한 B 은행의 수취인 계좌로 자금 이체를 시작합니다.
  2. A 은행 - 계좌 유효성 검사: A 은행은 고객의 계좌를 검증하고, 충분한 자금이 있는지 확인하며, 보류나 제한이 없는지 확인합니다.
  3. 규정 준수 확인 (A 은행): A 은행은 거래가 자금 세탁 방지(AML) 규정이나 국제 제재를 위반하지 않는지 확인하기 위해 규정 준수 검사를 실행합니다.
  4. 자금 이체 (A 은행): A 은행은 고객의 계좌에서 금액을 인출하고 자금을 어음 교환소나 중개 은행으로 보냅니다.
  5. 어음 교환소 처리: 어음 교환소는 거래를 처리하고, 통화 변환(USD에서 EUR로)을 수행하며, 자금을 B 은행으로 라우팅합니다.
  6. B 은행 - 계좌 유효성 검사: B 은행은 수취인의 계좌를 검증하고, 계좌가 활성 상태이며 자금을 수령할 수 있는지 확인합니다.
  7. 규정 준수 확인 (B 은행): B 은행은 독일 및 EU 규정을 준수하며 자체 규정 준수 검사를 실행합니다.
  8. 계좌 입금 (B 은행): B 은행은 수취인의 계좌에 금액을 입금합니다.
  9. 확인: B 은행은 A 은행에 확인 메시지를 보내고, A 은행은 고객에게 거래가 완료되었음을 알립니다.

보상 트랜잭션:

도구 및 기술

사가 패턴 구현을 지원할 수 있는 여러 도구와 기술이 있습니다:

사가 패턴 구현을 위한 모범 사례

사가 패턴을 효과적으로 구현하려면 다음 모범 사례를 고려하십시오:

결론

사가 패턴은 마이크로서비스 아키텍처에서 분산 트랜잭션을 관리하는 강력한 도구입니다. 트랜잭션을 일련의 작고 독립적인 트랜잭션으로 분해하고 실패를 보상하는 메커니즘을 제공함으로써, 사가 패턴은 데이터 일관성을 유지하고 탄력적이며 확장 가능하고 분리된 시스템을 구축할 수 있게 합니다. 사가 패턴은 구현하기 복잡할 수 있지만, 유연성, 확장성 및 탄력성 측면에서 제공하는 이점은 모든 마이크로서비스 아키텍처에 귀중한 자산이 됩니다.

사가 패턴의 미묘한 차이, 코레오그래피와 오케스트레이션 간의 장단점, 그리고 보상 트랜잭션의 중요성을 이해하면 오늘날의 복잡한 비즈니스 환경의 요구를 충족하는 강력한 분산 시스템을 설계하고 구현할 수 있는 능력을 갖추게 될 것입니다. 사가 패턴을 수용하는 것은 가장 복잡한 분산 트랜잭션도 자신 있게 처리할 수 있는 진정으로 탄력적이고 확장 가능한 마이크로서비스 아키텍처를 구축하는 단계입니다. 이 패턴을 적용할 때는 특정 요구사항과 컨텍스트를 고려하고 실제 경험과 피드백을 바탕으로 구현을 지속적으로 개선하는 것을 잊지 마십시오.